home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / workbench / libs / newlooklib.lha / newlook / newlook.h < prev    next >
C/C++ Source or Header  |  1993-12-26  |  7KB  |  213 lines

  1. /*
  2.  *  NewLook.H
  3.  *
  4.  *  (c)Copyright 1992,93 by Tobias Ferber,  All Rights Reserved
  5.  */
  6.  
  7. #ifndef NEWLOOK_H
  8. #define NEWLOOK_H
  9.  
  10. /****** newlook.lib/--background-- ******************************************
  11. *
  12. *   NEWLOOK
  13. *    The amiga newlook.lib has been designed to simplify the development
  14. *    of intuition based applications with os2.0 look even for os1.3
  15. *    users.
  16. *
  17. *   NOTES
  18. *    Wenn eine Funktion der newlook.lib eine andere Funktion der
  19. *    newlook.lib aufruft und diese fehlschlägt, so wird durch den
  20. *    SmartFreeAll(PRIVATE_HANDLE) in der aufgerufenen Funktion auch
  21. *    all der Speicher freigegeben der von der aufrufenden Funktion
  22. *    erfolgreich über das PRIVATE_HANDLE allokiert wurde.
  23. *    Das heißt, das man sich (solage dies nicht geändert ist) an
  24. *    folgende Konvention halten muß:
  25. *
  26. *    Wenn eine Funktion der newlook.lib fehlschlägt, so darf nur dann
  27. *    die Funktion SmartFreeAll(PRIVATE_HANDLE) aufgerufen werden, wenn
  28. *    das UserHandle != dem PRIVATE_HANDLE ist.
  29. *
  30. *    Allgemein sollte eine newlook Funktion etwa so aufgebaut sein:
  31. *
  32. *    <type> NewLook_Function( <parameters> )
  33. *    ....
  34. *    {
  35. *      if( <parameters are valid> )
  36. *      {
  37. *        ULONG UserHandle= SetNewLookHandle(PRIVATE_HANDLE);
  38. *
  39. *        if( <pointer 1>= SmartAllocate(<bytesize>) )
  40. *        {
  41. *          if( <pointer 2>= SmartAllocate(<bytesize>) )
  42. *          {
  43. *            ...
  44. *
  45. *            <initialize all data>
  46. *
  47. *            MakePrivateHandlePublic(UserHandle);
  48. *            return <pointer N>;
  49. *          }
  50. *        }
  51. *
  52. *        if(UserHandle != PRIVATE_HANDLE)
  53. *        { SmartFreeAll(PRIVATE_HANDLE);
  54. *          (void)SetNewLookHandle(UserHandle);
  55. *        }
  56. *      }
  57. *      return NULL;
  58. *    }
  59. *
  60. *   BUGS
  61. *    manche funktionen hängen noch dieselbe border struct sowohl an
  62. *    Gadget->GadgetRender als auch an Gadget->SelectRender
  63. *    UND DAS IST NICHT SOO GUT!
  64. *    weil es dann nur einen Border->NextBorder gibt!
  65. *
  66. *    GadgetRender suggeriert zwar, daß diese Borders auch im select
  67. *    state gerendert werden, tun sie aber nicht.  Man muß also
  68. *    zwei borders haben, einen für den select state und einen für den
  69. *    nicht-select state.
  70. *
  71. *    wenn das gadget im nicht-select state gerendert wurde und dann
  72. *    selektiert wird, so werden natürlich die gadgetrender borders nicht
  73. *    automatisch gelöscht...
  74. *
  75. *    Konvention: border, die an SelectRender angehängt werden heißen b1,
  76. *    die anderen entweder b oder b0.
  77. *
  78. *   TODO
  79. *    alle funktionen, die als parameter ein window bekommen, aber
  80. *    eigentlich nur deren RPort benötigen müssen auf den Parameter RastPort
  81. *    umgestellt werden.
  82. *
  83. *    zu überprüfen sind:
  84. *      SetScalebar(), ToggleButton(), DoCycleButton(),
  85. *      SetPaletteButtonPen(), RemoveGadgetSafely(), SetGFlags(),
  86. *
  87. *   IDEAS
  88. *    newlook bietet checkmark in windows?
  89. *    ScrollListView()
  90. *    Menu support ?
  91. *    vielleicht: Martin's Pop-Up button (x-window like)
  92. *    NewLookRequest() mit dem DCMP requester?
  93. *
  94. ******************************************************************************
  95. *
  96. *    Headers taken from the Autodoc style guide as of June 1990
  97. */
  98.  
  99. #include <exec/types.h>
  100. #include <exec/memory.h>
  101. #include <intuition/intuition.h>
  102. #include <graphics/gfx.h>
  103. #include <graphics/gfxbase.h>
  104. #include <graphics/rastport.h>
  105.  
  106. #ifdef __GNUC__
  107. /* suggest parentheses around assignment used as truth value */
  108. #define if(assignment) if((assignment))
  109. #endif /* __GNUC__ */
  110.  
  111. /* smartmem.c */
  112.  
  113. #define SMARTMEMTYPE      (MEMF_PUBLIC|MEMF_CLEAR)
  114. #define MAGIC_HANDLE      -1L
  115. #define PRIVATE_HANDLE    270970L
  116.  
  117. extern ULONG SetNewLookHandle(ULONG);
  118. extern void MakePrivateHandlePublic(ULONG);  /* NewLook PRIVATE !!! */
  119.  
  120. extern void *SmartAllocMem(ULONG,ULONG);
  121. extern void *SmartFree(void *);
  122. extern void *SmartFreeAll(ULONG);
  123.  
  124. #define SmartAllocate(numbytes)  SmartAllocMem( (numbytes),SMARTMEMTYPE )
  125.  
  126. #define CHECKBOX_WIDTH      26
  127. #define CHECKBOX_HEIGHT     11
  128.  
  129. #define RADIOBUTTON_WIDTH   17
  130. #define RADIOBUTTON_HEIGHT   9
  131.  
  132. #define SCALEBARHMIN        16
  133. #define SCALEBARVMIN        12
  134. #define SCALEBARPEN          3
  135.  
  136. /* CycleInfo will be linked to the CycleButton's UserData entry */
  137. struct CycleInfo {
  138.   APTR ci_UserData;                /* still available */
  139.   struct IntuiText *ci_IntuiText;  /* copy of struct IntuiText pointer */
  140.   STRPTR *ci_Items;                /* Array of strings w/ last STRPTR == NULL */
  141.   SHORT ci_CurrentIndex;           /* index of currently visible text */
  142. };
  143.  
  144. /* The structure returned by CreateScalebar() */
  145. struct ScalebarInfo {
  146.   struct Border *outline;   /* outline bevel box */
  147.   struct Image *scalebar;   /* 3 images */
  148.   LONG nmin, nmax;          /* numeric range */
  149.   LONG wmin, wmax;          /* graphic range */
  150. };
  151.  
  152. #define BORDERSIZE         (sizeof(struct Border))
  153. #define BORDERXYSIZE       (2*5*sizeof(SHORT))
  154. #define GFRAMEXYSIZE       (2*6*sizeof(SHORT))
  155. #define GADGETSIZE         (sizeof(struct Gadget))
  156. #define ITEXTSIZE          (sizeof(struct IntuiText))
  157. #define STRINGINFOSIZE     (sizeof(struct StringInfo))
  158. #define PROPINFOSIZE       (sizeof(struct PropInfo))
  159. #define IMAGESIZE          (sizeof(struct Image))
  160. #define CYCLEINFOSIZE      (sizeof(struct CycleInfo))
  161. #define SCALEBARINFOSIZE   (sizeof(struct ScalebarInfo))
  162. #define NEWWINDOWSIZE      (sizeof(struct NewWindow))
  163.  
  164. extern struct TextAttr Topaz80;
  165.  
  166. extern struct Border *CreateBorder(SHORT,SHORT, SHORT,SHORT, BOOL);
  167. extern struct IntuiText *CreateIText(SHORT, SHORT, STRPTR);
  168. extern struct Border *CreateFrame(SHORT,SHORT, USHORT,USHORT, USHORT,USHORT);
  169.  
  170. extern struct Border *AddGBorder(struct Gadget *, struct Border *);
  171. extern struct IntuiText *AddGText(struct Gadget *, STRPTR,STRPTR);
  172.  
  173. extern BOOL AddGGroupFrame(struct Gadget *, SHORT,SHORT, SHORT,SHORT, STRPTR);
  174.  
  175. extern struct ScalebarInfo *CreateScalebar(SHORT,SHORT, SHORT,SHORT, LONG,LONG);
  176. extern void SetScalebar(struct Window *, struct ScalebarInfo *, LONG);
  177.  
  178. extern struct Gadget *CreateButton(SHORT,SHORT, SHORT,SHORT, STRPTR, USHORT);
  179. extern struct Gadget *CreateArrowButton(SHORT,SHORT, STRPTR, USHORT);
  180. extern struct Gadget *CreateRadioButton(SHORT,SHORT, BOOL, USHORT);
  181. extern struct Gadget *CreatePaletteButton(WORD, WORD, WORD, WORD, UBYTE, USHORT);
  182. extern struct Gadget *CreateCheckbox(SHORT,SHORT, BOOL, USHORT);
  183. extern struct Gadget *CreateCycleButton(SHORT,SHORT,SHORT, STRPTR *, USHORT);
  184. extern struct Gadget *CreateStrGadget(SHORT,SHORT,SHORT, SHORT, USHORT);
  185. extern struct Gadget *CreateSlider(SHORT,SHORT,SHORT, STRPTR, USHORT);
  186. extern struct Gadget *CreateListView(SHORT,SHORT, SHORT,SHORT, STRPTR *, USHORT);
  187.  
  188. extern void ToggleButton(struct Window *, struct Gadget *);
  189. extern void DoCycleButton(struct Window *, struct Gadget *);
  190. extern void SetPaletteButtonPen(struct Window *, struct Gadget *, UBYTE);
  191.  
  192. extern USHORT RemoveGadgetSafely(struct Window *, struct Gadget *);
  193. extern void SetGFlags(struct Window *, struct Gadget *, USHORT);
  194.  
  195. #define OffGadgetSafely(w,g) SetGFlags(w,g,g->Flags | GADGDISABLED)
  196. #define OnGadgetSafely(w,g) SetGFlags(w,g,g->Flags &~ GADGDISABLED)
  197.  
  198. extern struct Gadget *LastGadget(struct Gadget *);
  199. extern struct Border *LastBorder(struct Border *);
  200. extern struct IntuiText *LastIText(struct IntuiText *);
  201.  
  202. extern void MoveIText(struct IntuiText *, SHORT,SHORT);
  203.  
  204. #define GadStrVal(g) (((struct StringInfo *)((g)->SpecialInfo))->Buffer)
  205. #define GadNumVal(g) (((struct StringInfo *)((g)->SpecialInfo))->LongInt)
  206.  
  207. /* PaletteButton's UserData entry is NewLook private !!! */
  208. #define GetPaletteButtonPen(g)  (((struct Border *)((g)->UserData))->FrontPen)
  209.  
  210. extern struct NewWindow *InitNewWindow(struct NewWindow *, UBYTE *, WORD,WORD, ULONG,ULONG, struct Gadget *);
  211.  
  212. #endif /* !NEWLOOK_H */
  213.